package day04.exception;

/**
 * finally块
 * finally块是异常处理机制的最后一块，它可以直接跟在try语句块之后或者最后一个catch之后。
 *
 * finally的特点:
 * 只要程序执行到try语句块中，无论try中语句是否出现异常，finally最后都必然执行
 * 通常我们会将释放资源这类操作放在finally中确保最后一定会被执行。例如IO操作后的close()
 * 1 finally必走,try不可单独存在,或者try...finally,或者try...catch...finally
 * 2 catch中子异常在前,父异常在后
 * 3 被try包围的代码,当出现异常后,异常后边的代码将不会再执行
 * 4 当被一个catch处理后,就不会再匹配后边的catch处理的异常,相当于捕获子异常后,
 * 后边即使有超类异常处理,也不会再执行
 * 5 当代码异常时,走完catch会继续往下执行,但当代码正常时,如果有return,
 * 则后边代码不会执行,保证部分代码的必走性,则需要把这些代码放在finally里面
 */

public class FinallyDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            String line = null;
            System.out.println(line.length());
            return;
        } catch (Exception e) {
            System.out.println("出错了");
        } finally {
            System.out.println("finally执行了");
        }
        System.out.println("程序结束了");
    }
}
